/**
 * 数据校验
 * Author:zhoujing  2018/12/27
 */
const RegExpr = {
  // 判断是否为空
  isEmpty: obj => {
    var myreg = /^\s*$/;

    if (myreg.test(obj) || obj == 'undefined' || obj == null) {
      return true;
    } else {
      return false;
    }
  },
  //判断是否是数组或对象，且判断是否为空, TODO 当元素为空时无法判断
  isArrEmpty: arr => {
    //if (Array.isArray(arr) || typeof arr === Object) {
    //  console.log(JSON.stringify(arr))
    if (JSON.stringify(arr) === '{}' || JSON.stringify(arr) === '[]') {
      return false;
    } else {
      return true;
    } //}else{
    // console.log('12'+arr)
    //return false
    //}

  },

  /**
   * 校验手机号
   * @param mobile
   * @returns {boolean}
   */
  isPoneAvailable: mobile => {
    var myreg = /^[1][3,4,5,7,8,9][0-9]{9}$/;
    return myreg.test(mobile);
  },

  /**
   * 校验纯数字
   * @param num
   * @returns {boolean}
   */
  checkNum: num => {
    return /^[0-9]+$/.test(num);
  },

  /**
   * 校验用户名：1-20位字符，首字符为字母
   * @param str
   * @returns {RegExp}
   */
  checkUserName: str => {
    return /^[a-zA-Z]{1,20}$/.test(str);
  },

  /**
   * 校验密码：6-20位，数字、字母、下划线
   * @param str
   * @returns {boolean}
   */
  checkPwd: str => {
    return /^(\\w){6,20}$/.test(str);
  },

  /**
   * 校验正整数 + 0
   * @param num
   * @returns {boolean}
   */
  checkPositiveInteger: num => {
    return /^[0-9]*[1-9][0-9]*$/.test(num);
  },

  /**
   * 校验字符串是否为数字
   * @param str
   * @returns {boolean}
   */
  isNumber: str => {
    var regPos = /^\d+(\.\d+)?$/; // 非负浮点数

    var regNeg = /^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$/; // 负浮点数

    if (regPos.test(str) || regNeg.test(str)) {
      return true;
    } else {
      return false;
    }
  },
  // 校验身份证号
  isIdCardAvailable: idCard => {
    // 15位和18位身份证号码的正则表达式
    var regIdCard = /^(^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$)|(^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])((\d{4})|\d{3}[Xx])$)$/; // 如果通过该验证，说明身份证格式正确，但准确性还需计算

    if (regIdCard.test(idCard)) {
      if (idCard.length == 18) {
        var idCardWi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]; // 将前17位加权因子保存在数组里

        var idCardY = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 这是除以11后，可能产生的11位余数、验证码，也保存成数组

        var idCardWiSum = 0; // 用来保存前17位各自乖以加权因子后的总和

        for (var i = 0; i < 17; i++) {
          idCardWiSum += idCard.substring(i, i + 1) * idCardWi[i];
        }

        var idCardMod = idCardWiSum % 11; // 计算出校验码所在数组的位置

        var idCardLast = idCard.substring(17); // 得到最后一位身份证号码
        // 如果等于2，则说明校验码是10，身份证号码最后一位应该是X

        if (idCardMod == 2) {
          if (idCardLast == 'X' || idCardLast == 'x') {
            return true;
          } else {
            return false;
          }
        } else {
          // 用计算出的验证码与最后一位身份证号码匹配，如果一致，说明通过，否则是无效的身份证号码
          if (idCardLast == idCardY[idCardMod]) {
            return true;
          } else {
            return false;
          }
        }
      }
    } else {
      return false;
    }
  }
};
export { RegExpr };